﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAL.Entities;
using BAL;
using System.Configuration;
using System.Globalization;

namespace GrouponDesktop.PedirDevolucion
{
    public partial class PedirDevolucionFrm : Form
    {
        private ClienteEntity _cliente;
        private ClienteBAL _clienteBAL;
        private string _fechaActual;
        private CuponEntity _cupon;

        private const string MOTIVO_DEVOLUCION = "Ingrese motivo devolucion";

        public PedirDevolucionFrm(UsuarioEntity usuario)
        {
            InitializeComponent();
            this.CancelButton = this.btnSalir;
            this.lblUsuario.Text += usuario.VarUsername;

            //Obtengo el cliente
            this._clienteBAL = new ClienteBAL();
            this._cliente = this._clienteBAL.GetClienteByUserId(usuario.IntIdUsuario);

            //Obtengo la fecha del archivo de configuracion
            this._fechaActual = ConfigurationSettings.AppSettings["actualDate"].ToString();
            this.lblFechaActual.Text = this._fechaActual;

            this.txtMotivo.Multiline = true;
            this.txtMotivo.Text = MOTIVO_DEVOLUCION;
            this.ConfigurarDataGrid();
        }

        private void ConfigurarDataGrid()
        {
            this.dgCupon.BorderStyle = BorderStyle.FixedSingle;
            this.dgCupon.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Single;
            this.dgCupon.RowHeadersVisible = false;
            this.dgCupon.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            this.dgCupon.RowsDefaultCellStyle.SelectionBackColor = Color.White;
            this.dgCupon.RowsDefaultCellStyle.SelectionForeColor = ForeColor;
            this.dgCupon.MultiSelect = false;
            this.dgCupon.RowTemplate.Resizable = DataGridViewTriState.False;
            this.dgCupon.AllowUserToAddRows = false;
            this.dgCupon.RowTemplate.Height = 30;
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            string codigoCupon = this.txtCodigoCupon.Text.Trim();

            if (codigoCupon != string.Empty)
            {
                CuponBAL cuponBAL = new CuponBAL();
                this._cupon = cuponBAL.GetCuponClienteByCodigo(codigoCupon, this._cliente.IntIdCliente);

                if (this._cupon != null)
                {
                    DataTable dt = this.CrearDataTable(this._cupon);
                    this.dgCupon.DataSource = dt;

                    this.dgCupon.Columns["FechaVenc"].Visible = false;
                }
                else
                {
                    MessageBox.Show(string.Format("El sistema no registra que usted posea el cupon codigo: {0}", codigoCupon), "Pedir Devolucion", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
        }

        private DataTable CrearDataTable(CuponEntity cupon)
        {
            DataTable dt = new DataTable();

            dt.Columns.Add("Codigo", typeof(string));
            dt.Columns.Add("ProveedorRS", typeof(string));
            dt.Columns.Add("Rubro", typeof(string));
            dt.Columns.Add("Descripcion", typeof(string));
            dt.Columns.Add("Precio", typeof(string));
            dt.Columns.Add("FechaVenc", typeof(string));

            dt.Rows.Add(cupon.CodigoCupon, cupon.ProveeRS, cupon.Rubro, cupon.DetalleCupon.Descripcion, "$" + cupon.DetalleCupon.Precio.ToString(), cupon.VencConsumoFecha.ToString("MM/dd/yyyy"));

            return dt;
        }

        private void txtMotivo_Enter(object sender, EventArgs e)
        {
            if (this.txtMotivo.Text == MOTIVO_DEVOLUCION)
            {
                this.txtMotivo.Text = string.Empty;
            }
        }

        private void txtMotivo_Leave(object sender, EventArgs e)
        {
            if (this.txtMotivo.Text == string.Empty)
            {
                this.txtMotivo.Text = MOTIVO_DEVOLUCION;
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            this.txtCodigoCupon.Text = string.Empty;
            this.txtMotivo.Text = string.Empty;
            this.dgCupon.DataSource = null;
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.dgCupon.Rows.Count > 0)
                {
                    DataGridViewRow rw = this.dgCupon.Rows[0];

//                    DateTime fechaActual = DateTime.ParseExact(this._fechaActual, "d", CultureInfo.InvariantCulture);
                    DateTime fechaActual = DateTime.Parse(this._fechaActual);
                    DateTime fechaVenc = DateTime.ParseExact(rw.Cells["FechaVenc"].Value.ToString(), "d", CultureInfo.InvariantCulture);

                    if (fechaVenc >= fechaActual)
                    {
                        string motivo = (this.txtMotivo.Text == MOTIVO_DEVOLUCION) ? string.Empty : this.txtMotivo.Text;

                        if (motivo != string.Empty)
                        {
                            this._clienteBAL.ReturnCupon(fechaActual, this._cliente.IntIdCliente, this._cupon.CodigoCupon, motivo);

                            string precio = rw.Cells["Precio"].Value.ToString();
                            MessageBox.Show("Operacion exitosa" + Environment.NewLine + string.Format("Se han reintegrado {0} ha su cuenta", precio), "Pedir Devolucion", MessageBoxButtons.OK, MessageBoxIcon.Information);

                            this.Close();
                        }
                        else
                        {
                            MessageBox.Show("Debe ingresar el motivo por el cual esta efectuando la devolucion", "Pedir devolucion", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }
                    }
                    else
                    {
                        MessageBox.Show("La fecha para el canje de este cupon ha expirado" + Environment.NewLine + "No puede devolver este cupon", "Pedir Devolucion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Pedir Devolucion", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
